package com.kevin;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import io.swagger.annotations.ApiOperation;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * 
 * Swagger2配置，访问地址 /swagger-ui.html<br>
 * 通过@Configuration注解，让Spring来加载该类配置。再通过@EnableSwagger2注解来启用Swagger2。
 * 
 * @ClassName Swagger2
 * @author <a href="mailto:donggongai@126.com" target="_blank">吕凯</a>
 * @date 2018年3月26日 下午3:21:10
 *
 */
@Configuration
//@EnableSwagger2
//中name用来从application.properties中读取某个属性值，如果该值为空，则返回false;如果值不为空，
//则将该值与havingValue指定的值进行比较，如果一样则返回true;否则返回false。如果返回值为false，则该configuration不生效；为true则生效。prefix前缀
public class Swagger2 {

    /**
     * 再通过createRestApi函数创建Docket的Bean之后，apiInfo()用来创建该Api的基本信息（这些基本信息会展现在文档页面中）。
     * select()函数返回一个ApiSelectorBuilder实例用来控制哪些接口暴露给Swagger来展现，本例采用指定扫描的包路径来定义， Swagger
     * 会扫描该包下所有Controller定义的API，并产生文档内容（除了被@ApiIgnore指定的请求）。
     * 
     * @Title createRestApi
     * @author 吕凯
     * @date 2018年3月26日 下午3:35:06
     * @return Docket
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) // 这里采用包含注解的方式来确定要显示的接口
                // .apis(RequestHandlerSelectors.basePackage("com.kevin.modules.system.controller")) //这里采用包扫描的方式来确定要显示的接口
                .paths(PathSelectors.any()).build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("springboot利用swagger构建api文档").description("简单优雅的restful风格")
                .contact(new Contact("kevin", "http://www.11315.com", "291490365@qq.com")).version("1.0").build();
    }
}